package com.wyf.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.List;

@Controller
public class UploadController {

    /**
     * 文件上传
     *   在形参上使用@RequestParam("myfile") MultipartFile file 接受上传文件
     *
     * @param request
     * @param file
     * @return
     */
    @RequestMapping("uploadFile")
    public String uploadFile(HttpServletRequest request, @RequestParam("myfile") MultipartFile file) {

       // // 得到文件上传的request对象
       // MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
       //
       // // 得到上传的文件
       // MultipartFile myfile = multipartHttpServletRequest.getFile("myfile");

        // 判断上传文件是否为空
        if (file.isEmpty()) {
            request.setAttribute("msg", "select file");
            return "result";
        }
        // 保存文件
        saveFile(file, request);

        return "result";

    }

    /**
     * 多文件上传
     * @param request
     * @param files
     * @return
     */
    @RequestMapping("uploadFiles")
    public String uploadFiles(HttpServletRequest request, @RequestParam("myfiles") List<MultipartFile> files) {

        // 判断是否为空，且长度大于0
        if (files != null && files.size() > 0) {
            for (MultipartFile file : files) {
                // 判断上传文件是否为空
                if (file.isEmpty()) {
                    request.setAttribute("msg", "select file");
                    return "result";
                }

                // 保存文件
                saveFile(file, request);
            }
        }


        return "result";

    }

    /**
     * 保存文件
     * @param file
     * @param request
     */
    public void saveFile(MultipartFile file, HttpServletRequest request) {
        // 得到上传的文件名
        String originalFilename = file.getOriginalFilename();
        // 截取文件名，得到文件后缀
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        // 生成随机文件名
        String fileName = System.currentTimeMillis() + suffix;


        // 得到项目的真是路径
        String realPath = request.getServletContext().getRealPath("/");
        // 设置文件存储路径
        File filePath = new File(realPath, "upload");
        // 判断文件目录是否存在，不存在则创建
        if (!filePath.exists()) {
            filePath.mkdir();
        }

        try {
            // 上传文件名
            file.transferTo(new File(filePath, fileName));
            request.setAttribute("msg", "upload success");
        } catch (IOException e) {
            request.setAttribute("msg", "upload failed");
            e.printStackTrace();
        }
    }
}
